﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using MJM.SPP.EntidadesNegocio;
using MJM.Principal;

namespace wRegPadron.frmOpciones
{
    public partial class ucConfiguracion : System.Web.UI.UserControl
    {
        static public int idSeleccionadoPrograma = 0;
        static public int idSeleccionadoPrograma2 = 0;
        static public int idSeleccionadoModulo = 0;
        static public int idSeleccionadoModulo2 = 0;
        static public int idSeleccionadoOpcion = 0;
        static public int idSeleccionadoPrograma3 = 0;
        static public int idSeleccionadoOpcion2 = 0;
        static public int idSeleccionadoControl = 0;
        static public bool flag = false;

        protected void Eliminacion(int Opt)
        {
            int codigo;
            if (Opt == 1)
            {
                MediadorCN.GetAccesoGrupo().EliminarPermisosPrograma(idSeleccionadoPrograma);
                MediadorCN.GetPrograma().Eliminar(idSeleccionadoPrograma);
                gvProgramas.DataSource = MediadorCN.GetPrograma().Listar();
                gvProgramas.DataBind();
            }
            else if (Opt == 2)
            {
                codigo = MediadorCN.GetModulo().Eliminar(idSeleccionadoModulo, idSeleccionadoPrograma2);
                MediadorCN.GetAccesoGrupo().EliminarPermisosModulo(idSeleccionadoModulo);
                List<ModuloEN> lstModuloEN = MediadorCN.GetModulo().Listar(idSeleccionadoPrograma2);
                gvModulos.DataSource = lstModuloEN;
                gvModulos.DataBind();
            }
            else if (Opt == 3)
            {
                codigo = MediadorCN.GetSubOpcion().Eliminar(idSeleccionadoOpcion);
                if (codigo > 0)
                {
                    MediadorCN.GetAccesoGrupo().EliminarPermisosOpcion(idSeleccionadoOpcion);
                    gvOpciones.DataSource = MediadorCN.GetSubOpcion().Listar(idSeleccionadoModulo2);
                    gvOpciones.DataBind();
                }
            }
            else if (Opt == 4)
            {
                codigo = MediadorCN.GetControl().Eliminar(idSeleccionadoControl);
                if (codigo > 0)
                {
                    MediadorCN.GetAccesoGrupo().EliminarPermisosControl(idSeleccionadoControl);
                    gvControles.DataSource = MediadorCN.GetControl().Listar(idSeleccionadoOpcion2);
                    gvControles.DataBind();
                }
            }
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                List<ModuloEN> lstModulos = new List<ModuloEN>();
                TreeNode nodo, nodo2a, nodo2b;
                SubOpcionEN objSubOpcionEN = MediadorCN.GetSubOpcion().ObtenerTexto("MenuModulos");
                lblTitulo.Text = objSubOpcionEN.SUBOPT_chNOMSOP;
                lblDescripcion.Text = objSubOpcionEN.SUBOPT_chDESSOP;
                List<ProgramaEN> lst = MediadorCN.GetPrograma().Listar();
                List<SubOpcionEN> lstSubOpcion = new List<SubOpcionEN>();
                gvProgramas.DataSource = lst;
                gvProgramas.DataBind();

                lblListaParametros.Visible = false;
                lblParametros2.Visible = false;
                cbParametros2.Visible = false;

                btnRegistrar.Visible = true;
                btnGuardarModulo.Visible = true;
                btnRegistraOpcion.Visible = true;
                btnRegistrarControl.Visible = true;

                btnEditar.Visible = false;
                btnEditarModulo.Visible = false;
                btnEditarOpcion.Visible = false;
                btnEditarControl.Visible = false;

                TreeNode nodo1a, nodo1b, nodo1c;
                nodo1a = new TreeNode();
                nodo1a.Text = "Aplicaciones";
                nodo1a.Value = "0";
                tvProgramas.Nodes.Add(nodo1a);
                for (int i = 0; i < lst.Count; i++)
                {
                    nodo1a = new TreeNode();
                    if (lst[i].EnvParametro == 2)
                        nodo1a.Value = lst[i].PROMUN_inID.ToString() + "1";
                    else
                        nodo1a.Value = lst[i].PROMUN_inID.ToString() + "0";

                    nodo1a.Text = lst[i].PROMUN_chNOMPRO;
                    nodo1b = new TreeNode();
                    if (lst[i].EnvParametro == 2)
                        nodo1b.Value = lst[i].PROMUN_inID.ToString() + "4";
                    else
                        nodo1b.Value = lst[i].PROMUN_inID.ToString() + "0";

                    nodo1b.Text = lst[i].PROMUN_chNOMPRO;
                    nodo1c = new TreeNode();
                    if (lst[i].EnvParametro == 2)
                        nodo1c.Value = lst[i].PROMUN_inID.ToString() + "4";
                    else
                        nodo1c.Value = lst[i].PROMUN_inID.ToString() + "0";
                    nodo1c.Text = lst[i].PROMUN_chNOMPRO;
                    tvProgramas.Nodes[0].ChildNodes.Add(nodo1a);
                    tvModuloOpcion.Nodes.Add(nodo1b);
                    tvOpcionControl.Nodes.Add(nodo1c);
                    lstModulos = MediadorCN.GetModulo().Listar(lst[i].PROMUN_inID);
                    for (int j = 0; j < lstModulos.Count; j++)
                    {
                        nodo2a = new TreeNode();
                        nodo2a.Value = lstModulos[j].OPTGEN_P_inID.ToString() + "1";
                        nodo2a.Text = lstModulos[j].OPTGEN_chNOMMEN;
                        tvModuloOpcion.Nodes[i].ChildNodes.Add(nodo2a);
                        nodo2b = new TreeNode();
                        nodo2b.Value = lstModulos[j].OPTGEN_P_inID.ToString() + "1";
                        nodo2b.Text = lstModulos[j].OPTGEN_chNOMMEN;
                        tvOpcionControl.Nodes[i].ChildNodes.Add(nodo2b);
                        lstSubOpcion = MediadorCN.GetSubOpcion().Listar(lstModulos[j].OPTGEN_P_inID);
                        for (int z = 0; z < lstSubOpcion.Count; z++)
                        {
                            nodo = new TreeNode();
                            nodo.Value = lstSubOpcion[z].SUBOPT_P_inID.ToString() + "2";
                            nodo.Text = lstSubOpcion[z].SUBOPT_chNOMSOP;
                            tvOpcionControl.Nodes[i].ChildNodes[j].ChildNodes.Add(nodo);
                        }
                    }
                }
                tvProgramas.ExpandAll();
            }
        }

        protected void btnRegistrar_Click(object sender, EventArgs e)
        {
            bool HasParam = false;
            if (txtEnlace.Text != "" && txtNombrePrograma.Text != "")
            {
                ProgramaEN objProgramaEN = new ProgramaEN();
                List<GrupoUsuariosEN> lstGrupoUsuarios = new List<GrupoUsuariosEN>();
                AccesoGrupoEN objAccesoGrupoEN;
                if (lblEnlace.Visible)
                    objProgramaEN.Enlace = txtEnlace.Text;
                else
                    objProgramaEN.Enlace = "";
                objProgramaEN.PROMUN_chDESPRO = txtDescripcionPrograma.Text;
                objProgramaEN.PROMUN_chNOMPRO = txtNombrePrograma.Text;
                objProgramaEN.Codigo = txtCodigoPrograma.Text;
                if (cbParametros.Visible)
                {
                    if (cbParametros.Checked)
                    {
                        objProgramaEN.EnvParametro = 1;
                        HasParam = true;
                    }
                    else
                        objProgramaEN.EnvParametro = 0;
                }
                else
                    objProgramaEN.EnvParametro = 2;

                int cod, codigo = MediadorCN.GetPrograma().Insertar(objProgramaEN);
                if (codigo > 0)
                {
                    lstGrupoUsuarios = MediadorCN.GetGrupoUsuario().Listar();
                    for (int i = 0; i < lstGrupoUsuarios.Count; i++)
                    {
                        objAccesoGrupoEN = new AccesoGrupoEN();
                        objAccesoGrupoEN.USUGRU_P_inID1 = lstGrupoUsuarios[i].USUGRU_P_inID;
                        objAccesoGrupoEN.PROMUN_inID = codigo;
                        objAccesoGrupoEN.PERGRU_inACT = 0;
                        objAccesoGrupoEN.OPTGEN_P_inID = 0;
                        objAccesoGrupoEN.OPTCON_P_inID = 0;
                        objAccesoGrupoEN.SUBOPT_P_inID = 0;
                        cod = MediadorCN.GetAccesoGrupo().Insertar(objAccesoGrupoEN);
                    }
                    if (HasParam)
                    {
                        ParametroCuentEN objParametroCuentEN;
                        for (int i = 0; i < cblParametros.Items.Count; i++)
                        {
                            if (cblParametros.Items[i].Selected)
                            {
                                objParametroCuentEN = new ParametroCuentEN();
                                objParametroCuentEN.CUEWEB_P_inID = codigo;
                                objParametroCuentEN.PARURL_P_inID = Convert.ToInt32(cblParametros.Items[i].Value);
                                MediadorCN.GetParametroCuent().Insertar(objParametroCuentEN);
                            }
                        }
                    }
                    if (cbRestriccion.Checked)
                    {
                        RestriccionModEN objRestriccionModEN = new RestriccionModEN();
                        objRestriccionModEN.RESEXT_chTIPRES = "A";
                        objRestriccionModEN.RESEXT_inACCRES = codigo;
                        MediadorCN.GetRestriccionMod().Insertar(objRestriccionModEN);
                    }
                    lblErrorPrograma.Text = "El registro se completó satisfactoriamente";
                    txtEnlace.Text = "";
                    txtNombrePrograma.Text = "";
                    txtCodigoPrograma.Text = "";
                    txtDescripcionPrograma.Text = "";
                    cbParametros.Checked = false;
                    gvProgramas.DataSource = MediadorCN.GetPrograma().Listar();
                    gvProgramas.DataBind();
                }
                else
                {
                    lblErrorPrograma.Text = "El registro no se pudo completar";
                }
            }
            else
                lblErrorPrograma.Text = "Complete los datos solicitados";
        }

        protected void gvProgramas_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            int index = Convert.ToInt32(e.CommandArgument);
            GridViewRow row = gvProgramas.Rows[index];
            idSeleccionadoPrograma = Convert.ToInt32(Server.HtmlDecode(row.Cells[0].Text).ToString());
            hfIdProgramaSelected.Value = idSeleccionadoPrograma.ToString();
            if (e.CommandName == "Editar")
            {
                ProgramaEN objProgramaEN = MediadorCN.GetPrograma().Obtener(idSeleccionadoPrograma);
                txtDescripcionPrograma.Text = objProgramaEN.PROMUN_chDESPRO;
                txtEnlace.Text = objProgramaEN.Enlace;
                txtNombrePrograma.Text = objProgramaEN.PROMUN_chNOMPRO;
                txtCodigoPrograma.Text = objProgramaEN.Codigo;
                if (objProgramaEN.EnvParametro == 2)
                {
                    cbParametros.Visible = false;
                    lblEnlace.Visible = false;
                    txtEnlace.Visible = false;
                    cblParametros.Visible = false;
                    lblListaParametros.Visible = false;
                }
                else
                {
                    cblParametros.Visible = true;
                    lblListaParametros.Visible = true;
                    cbParametros.Visible = true;
                    lblEnlace.Visible = true;
                    txtEnlace.Visible = true;
                    if (objProgramaEN.EnvParametro == 1)
                    {
                        cbParametros.Checked = true;
                        List<ParametroCuentEN> lstParametroCuent = MediadorCN.GetParametroCuent().Listar(idSeleccionadoPrograma);
                        cblParametros.DataSource = MediadorCN.GetParametro().Listar();
                        cblParametros.DataTextField = "NombreParam";
                        cblParametros.DataValueField = "ID";
                        cblParametros.DataBind();
                        for (int i = 0; i < cblParametros.Items.Count; i++)
                        {
                            for (int j = 0; j < lstParametroCuent.Count; j++)
                            {
                                if (lstParametroCuent[j].PARURL_P_inID == Convert.ToInt32(cblParametros.Items[i].Value))
                                    cblParametros.Items[i].Selected = true;
                            }
                        }

                    }
                    else
                    {
                        cblParametros.Visible = false;
                        lblListaParametros.Visible = false;
                        cbParametros.Checked = false;
                    }
                }
                btnEditar.Visible = true;
                btnRegistrar.Visible = false;
            }
            if (e.CommandName == "Eliminar")
            {/*
                MediadorCN.GetAccesoGrupo().EliminarPermisosPrograma(idSeleccionadoPrograma);
                MediadorCN.GetPrograma().Eliminar(idSeleccionadoPrograma);
                gvProgramas.DataSource = MediadorCN.GetPrograma().Listar();
                gvProgramas.DataBind();*/
                hfOpcion.Value = "1";
                ModalPopupExtender1.Show();
            }
            lblErrorPrograma.Text = "";
        }

        protected void btnEditar_Click(object sender, EventArgs e)
        {
            if (txtEnlace.Text != "" && txtNombrePrograma.Text != "")
            {
                ProgramaEN objProgramaEN = new ProgramaEN();

                objProgramaEN.PROMUN_chDESPRO = txtDescripcionPrograma.Text;
                if (lblEnlace.Visible)
                    objProgramaEN.Enlace = txtEnlace.Text;
                else
                    objProgramaEN.Enlace = "";
                objProgramaEN.Codigo = txtCodigoPrograma.Text;
                objProgramaEN.PROMUN_chNOMPRO = txtNombrePrograma.Text;
                objProgramaEN.PROMUN_inID = Convert.ToInt32(hfIdProgramaSelected.Value);
                objProgramaEN.PROMUN_inFLAELI = 1;

                if (cbParametros.Visible)
                {
                    if (cbParametros.Checked)
                    {
                        objProgramaEN.EnvParametro = 1;
                        for (int i = 0; i < cblParametros.Items.Count; i++)
                        {
                            MediadorCN.GetParametroCuent().Eliminar(idSeleccionadoPrograma, Convert.ToInt32(cblParametros.Items[i].Value));
                            if (cblParametros.Items[i].Selected)
                            {
                                ParametroCuentEN objParametroCuentEN = new ParametroCuentEN();
                                objParametroCuentEN.CUEWEB_P_inID = idSeleccionadoPrograma;
                                objParametroCuentEN.PARURL_P_inID = Convert.ToInt32(cblParametros.Items[i].Value);
                                MediadorCN.GetParametroCuent().Insertar(objParametroCuentEN);
                            }
                        }
                    }
                    else
                    {
                        objProgramaEN.EnvParametro = 0;
                        List<ParametroEN> lstParametroEN = MediadorCN.GetParametro().Listar();
                        for (int i = 0; i < lstParametroEN.Count; i++)
                        {
                            MediadorCN.GetParametroCuent().Eliminar(idSeleccionadoPrograma, lstParametroEN[i].ID);
                        }
                    }
                }
                else
                {
                    objProgramaEN.EnvParametro = 2;
                }

                int codigo = MediadorCN.GetPrograma().Modificar(objProgramaEN);
                if (codigo > 0)
                {
                    if (MediadorCN.GetRestriccionMod().Obtener(objProgramaEN.PROMUN_inID) != null)
                    {
                        if (!cbRestriccion.Checked)
                            MediadorCN.GetRestriccionMod().Eliminar(objProgramaEN.PROMUN_inID);
                    }
                    else
                    {
                        if (cbRestriccion.Checked)
                        {
                            RestriccionModEN objRestriccionEN = new RestriccionModEN();
                            objRestriccionEN.RESEXT_inACCRES = objProgramaEN.PROMUN_inID;
                            objRestriccionEN.RESEXT_chTIPRES = "A";
                            MediadorCN.GetRestriccionMod().Insertar(objRestriccionEN);
                        }
                    }
                    txtEnlace.Text = "";
                    txtNombrePrograma.Text = "";
                    txtCodigoPrograma.Text = "";
                    txtDescripcionPrograma.Text = "";
                    lblErrorPrograma.Text = "Los cambios fueron guardados correctamente";
                    gvProgramas.DataSource = MediadorCN.GetPrograma().Listar();
                    gvProgramas.DataBind();
                    btnEditar.Visible = false;
                    btnRegistrar.Visible = true;
                    cbParametros.Checked = false;
                    lblListaParametros.Visible = false;
                    cblParametros.Visible = false;
                }
                else
                {
                    lblErrorPrograma.Text = "No se han podido guardar los cambios";
                }
            }
            else
                lblErrorPrograma.Text = "Complete los datos solicitados";
        }

        protected void tvProgramas_SelectedNodeChanged(object sender, EventArgs e)
        {
            int index = Convert.ToInt32(tvProgramas.SelectedNode.Value);
            txtNombreModulo.Text = "";
            txtCodigoModulo.Text = "";
            if (index != 0)
            {
                idSeleccionadoPrograma2 = index / 10;
                List<ModuloEN> lstModuloEN = MediadorCN.GetModulo().Listar(idSeleccionadoPrograma2);
                gvModulos.DataSource = lstModuloEN;
                gvModulos.DataBind();
                lblTextoListaModulos.Text = "Lista de módulos de la aplicación " + tvProgramas.SelectedNode.Text;

            }
        }

        protected void gvModulos_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            int idModulo;
            int index = Convert.ToInt32(e.CommandArgument);
            GridViewRow row = gvModulos.Rows[index];
            idModulo = Convert.ToInt32(Server.HtmlDecode(row.Cells[0].Text).ToString());
            idSeleccionadoModulo = idModulo;
            if (e.CommandName == "Editar")
            {
                ModuloEN objModuloEN = MediadorCN.GetModulo().ObtenerModulo(idModulo, idSeleccionadoPrograma2);
                txtNombreModulo.Text = objModuloEN.OPTGEN_chNOMMEN;
                txtCodigoModulo.Text = objModuloEN.Codigo;
                btnEditarModulo.Visible = true;
                btnGuardarModulo.Visible = false;
                if (MediadorCN.GetRestriccionMod().Obtener(idModulo) != null)
                    cbRestriccion.Checked = true;
                else
                    cbRestriccion.Checked = false;

            }
            else if (e.CommandName == "Eliminar")
            {
                //ModuloCN objModuloCN = new ModuloCN();
                hfOpcion.Value = "2";
                ModalPopupExtender1.Show();
            }
        }

        protected void btnGuardarModulo_Click(object sender, EventArgs e)
        {
            if (idSeleccionadoPrograma2 != 0)
            {
                if (txtNombreModulo.Text != "")
                {
                    List<GrupoUsuariosEN> lstGrupoUsuarios = new List<GrupoUsuariosEN>();
                    ModuloEN objModuloEN = new ModuloEN();
                    AccesoGrupoEN objAccesoGrupoEN;
                    objModuloEN.OPTGEN_chDESMEN = "";
                    objModuloEN.OPTGEN_chNOMMEN = txtNombreModulo.Text;
                    objModuloEN.Codigo = txtCodigoModulo.Text;
                    objModuloEN.PROMUN_inID = idSeleccionadoPrograma2;
                    int codigo = MediadorCN.GetModulo().Insertar(objModuloEN);
                    if (codigo > 0)
                    {
                        lstGrupoUsuarios = MediadorCN.GetGrupoUsuario().Listar();
                        for (int i = 0; i < lstGrupoUsuarios.Count; i++)
                        {
                            objAccesoGrupoEN = new AccesoGrupoEN();
                            objAccesoGrupoEN.USUGRU_P_inID1 = lstGrupoUsuarios[i].USUGRU_P_inID;
                            objAccesoGrupoEN.PROMUN_inID = idSeleccionadoPrograma2;
                            objAccesoGrupoEN.PERGRU_inACT = 0;
                            objAccesoGrupoEN.OPTGEN_P_inID = codigo;
                            objAccesoGrupoEN.OPTCON_P_inID = 0;
                            objAccesoGrupoEN.SUBOPT_P_inID = 0;
                            MediadorCN.GetAccesoGrupo().Insertar(objAccesoGrupoEN);
                        }
                        txtNombreModulo.Text = "";
                        txtCodigoModulo.Text = "";
                        lblErrorModulo.Text = "El módulo se registró correctamente.";
                        //Actualizar();
                        cbRestriccion.Checked = false;
                        List<ModuloEN> lstModuloEN = MediadorCN.GetModulo().Listar(idSeleccionadoPrograma2);
                        gvModulos.DataSource = lstModuloEN;
                        gvModulos.DataBind();
                    }
                }
                else
                    lblErrorModulo.Text = "Ingrese el nombre del módulo";
            }
            else
            {
                lblErrorModulo.Text = "Seleccione la aplicación";
            }
        }

        protected void btnEditarModulo_Click(object sender, EventArgs e)
        {
            if (txtNombreModulo.Text != "")
            {
                ModuloEN objModuloEN = new ModuloEN();
                objModuloEN.OPTGEN_chNOMMEN = txtNombreModulo.Text;
                objModuloEN.OPTGEN_chDESMEN = "";
                objModuloEN.SEGU_inFLAELI = 1;
                objModuloEN.Codigo = txtCodigoModulo.Text;
                objModuloEN.PROMUN_inID = idSeleccionadoPrograma2;
                objModuloEN.OPTGEN_P_inID = idSeleccionadoModulo;
                int codigo = MediadorCN.GetModulo().Modificar(objModuloEN);
                if (codigo == 1)
                {
                    txtNombreModulo.Text = "";
                    txtCodigoModulo.Text = "";
                    cbRestriccion.Checked = false;
                    lblErrorModulo.Text = "El módulo se actualizó correctamente";
                    List<ModuloEN> lstModuloEN = MediadorCN.GetModulo().Listar(idSeleccionadoPrograma2);
                    gvModulos.DataSource = lstModuloEN;
                    gvModulos.DataBind();
                    btnEditarModulo.Visible = false;
                    btnGuardarModulo.Visible = true;
                    //Actualizar();
                }
                else
                {
                    lblErrorModulo.Text = "";
                    lblErrorModulo.Text = "El módulo no pudo ser actualizado";
                }
            }
            else
                lblErrorModulo.Text = "Ingrese el nombre del módulo";

        }

        protected void Actualizar()
        {
            //upTabContainer.Update();
            List<ProgramaEN> lst = MediadorCN.GetPrograma().Listar();
            List<SubOpcionEN> lstSubOpcion = new List<SubOpcionEN>();
            List<ModuloEN> lstModulos = new List<ModuloEN>();
            TreeNode nodo, nodo2a, nodo2b;
            tvOpcionControl.Nodes.Clear();
            tvModuloOpcion.Nodes.Clear();
            tvProgramas.Nodes.Clear();
            lblErrorModulo.Text = "";
            lblErrorOpcion.Text = "";
            lblErrorPrograma.Text = "";
            gvModulos.DataSource = null;
            gvOpciones.DataSource = null;
            gvControles.DataSource = null;
            flag = false;
            gvModulos.DataBind();
            gvOpciones.DataBind();
            gvControles.DataBind();
            lblTextoListaModulos.Text = "";
            lblTextoListaOpciones.Text = "";
            lblTextoListaControl.Text = "";
            idSeleccionadoControl = 0;
            idSeleccionadoOpcion2 = 0;
            idSeleccionadoPrograma = 0;
            idSeleccionadoPrograma2 = 0;
            idSeleccionadoModulo = 0;
            idSeleccionadoModulo2 = 0;
            idSeleccionadoOpcion = 0;
            idSeleccionadoPrograma3 = 0;
            btnEditar.Visible = false;
            btnEditarControl.Visible = false;
            btnEditarModulo.Visible = false;
            btnEditarOpcion.Visible = false;

            btnRegistraOpcion.Visible = true;
            btnGuardarModulo.Visible = true;
            btnRegistrarControl.Visible = true;
            btnRegistrar.Visible = true;

            TreeNode nodo1a, nodo1b, nodo1c;
            nodo1a = new TreeNode();
            nodo1a.Text = "Aplicaciones";
            nodo1a.Value = "0";
            tvProgramas.Nodes.Add(nodo1a);
            for (int i = 0; i < lst.Count; i++)
            {
                nodo1a = new TreeNode();
                if (lst[i].EnvParametro == 2)
                    nodo1a.Value = lst[i].PROMUN_inID.ToString() + "1";
                else
                    nodo1a.Value = lst[i].PROMUN_inID.ToString() + "0";
                nodo1a.Text = lst[i].PROMUN_chNOMPRO;
                nodo1b = new TreeNode();
                if (lst[i].EnvParametro == 2)
                    nodo1b.Value = lst[i].PROMUN_inID.ToString() + "4";
                else
                    nodo1b.Value = lst[i].PROMUN_inID.ToString() + "0";
                nodo1b.Text = lst[i].PROMUN_chNOMPRO;
                nodo1c = new TreeNode();
                if (lst[i].EnvParametro == 2)
                    nodo1c.Value = lst[i].PROMUN_inID.ToString() + "4";
                else
                    nodo1c.Value = lst[i].PROMUN_inID.ToString() + "0";
                nodo1c.Text = lst[i].PROMUN_chNOMPRO;
                tvProgramas.Nodes[0].ChildNodes.Add(nodo1a);
                tvModuloOpcion.Nodes.Add(nodo1b);
                tvOpcionControl.Nodes.Add(nodo1c);
                lstModulos = MediadorCN.GetModulo().Listar(lst[i].PROMUN_inID);
                for (int j = 0; j < lstModulos.Count; j++)
                {
                    nodo2a = new TreeNode();
                    nodo2a.Value = lstModulos[j].OPTGEN_P_inID.ToString() + "1";
                    nodo2a.Text = lstModulos[j].OPTGEN_chNOMMEN;
                    tvModuloOpcion.Nodes[i].ChildNodes.Add(nodo2a);
                    nodo2b = new TreeNode();
                    nodo2b.Value = lstModulos[j].OPTGEN_P_inID.ToString() + "1";
                    nodo2b.Text = lstModulos[j].OPTGEN_chNOMMEN;
                    tvOpcionControl.Nodes[i].ChildNodes.Add(nodo2b);
                    lstSubOpcion = MediadorCN.GetSubOpcion().Listar(lstModulos[j].OPTGEN_P_inID);
                    for (int z = 0; z < lstSubOpcion.Count; z++)
                    {
                        nodo = new TreeNode();
                        nodo.Value = lstSubOpcion[z].SUBOPT_P_inID.ToString() + "2";
                        nodo.Text = lstSubOpcion[z].SUBOPT_chNOMSOP;
                        tvOpcionControl.Nodes[i].ChildNodes[j].ChildNodes.Add(nodo);
                    }
                }
                tvProgramas.ExpandAll();
            }
        }

        protected void tvModuloOpcion_SelectedNodeChanged(object sender, EventArgs e)
        {
            int index = Convert.ToInt32(tvModuloOpcion.SelectedValue);
            List<SubOpcionEN> lstSubOpcion = new List<SubOpcionEN>();
            try
            {
                int valor = Convert.ToInt32(tvModuloOpcion.SelectedNode.Parent.Value);
                if (index % 10 != 0)
                {
                    idSeleccionadoModulo2 = index / 10;
                    idSeleccionadoPrograma3 = Convert.ToInt32(tvModuloOpcion.SelectedNode.Parent.Value) / 10;
                    lstSubOpcion = MediadorCN.GetSubOpcion().Listar(idSeleccionadoModulo2);
                    gvOpciones.DataSource = lstSubOpcion;
                    gvOpciones.DataBind();
                    txtEnlaceOpcion.Text = "";
                    txtNombreOpcion.Text = "";
                    txtCodigoOpcion.Text = "";
                    txtDescripcion.Text = "";
                    lblTextoListaOpciones.Text = "La lista de opciones del módulo " + tvModuloOpcion.SelectedNode.Text;
                    if (valor % 10 != 4)
                    {
                        lblTextoEnlace.Visible = false;
                        lblTextoubi.Visible = false;
                        rbExterno.Visible = false;
                        rbInterno.Visible = false;
                        txtEnlaceOpcion.Visible = false;
                        cbParametrosMod.Visible = false;
                        lblParametros2.Visible = false;
                        flag = true;
                    }
                    else
                    {
                        lblTextoEnlace.Visible = true;
                        lblTextoubi.Visible = true;
                        rbExterno.Visible = true;
                        rbInterno.Visible = true;
                        txtEnlaceOpcion.Visible = true;
                        cbParametrosMod.Visible = true;
                        lblParametros2.Visible = false;
                        flag = false;
                    }
                }
            }
            catch
            {

            }
        }

        protected void gvOpciones_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            int idOpcion;
            int index = Convert.ToInt32(e.CommandArgument);
            GridViewRow row = gvOpciones.Rows[index];
            idOpcion = Convert.ToInt32(Server.HtmlDecode(row.Cells[0].Text).ToString());
            idSeleccionadoOpcion = idOpcion;
            SubOpcionEN objSubOpcionEN = new SubOpcionEN();
            if (e.CommandName == "Editar")
            {
                objSubOpcionEN = MediadorCN.GetSubOpcion().Obtener(idOpcion);
                txtDescripcion.Text = objSubOpcionEN.SUBOPT_chDESSOP;
                if (objSubOpcionEN.Tipo == 'I')
                    txtEnlaceOpcion.Text = objSubOpcionEN.SUBOPT_chNOMASP;
                else
                    txtEnlaceOpcion.Text = objSubOpcionEN.SUBOPT_chDIRURL;
                txtNombreOpcion.Text = objSubOpcionEN.SUBOPT_chNOMSOP;
                txtCodigoOpcion.Text = objSubOpcionEN.Codigo;
                if (objSubOpcionEN.EnvParametro == 1)
                    cbParametrosMod.Checked = true;
                else
                    cbParametrosMod.Checked = false;
                if (objSubOpcionEN.Tipo == 'I')
                {
                    rbInterno.Checked = true;
                    rbExterno.Checked = false;
                    //lblHttp.Visible = false;
                }
                else
                {
                    rbExterno.Checked = true;
                    rbInterno.Checked = false;
                    //lblHttp.Visible = true;
                }
                btnRegistraOpcion.Visible = false;
                btnEditarOpcion.Visible = true;
            }
            else if (e.CommandName == "Eliminar")
            {
                hfOpcion.Value = "3";
                ModalPopupExtender1.Show();
                /*
                int codigo = MediadorCN.GetSubOpcion().Eliminar(idOpcion);
                if (codigo > 0)
                {
                    MediadorCN.GetAccesoGrupo().EliminarPermisosOpcion(idSeleccionadoOpcion);
                    gvOpciones.DataSource = MediadorCN.GetSubOpcion().Listar(idSeleccionadoModulo2);
                    gvOpciones.DataBind();
                }
                else
                {

                }*/
            }
        }

        protected void btnRegistraOpcion_Click(object sender, EventArgs e)
        {
            bool HasParam = false;
            if (idSeleccionadoModulo2 != 0)
            {
                if (txtNombreOpcion.Text != "" && txtDescripcion.Text != "")
                {
                    List<GrupoUsuariosEN> lstGrupoUsuarios = new List<GrupoUsuariosEN>();
                    SubOpcionEN objSubOpcionEN = new SubOpcionEN();
                    AccesoGrupoEN objAccesoGrupoEN;
                    if (flag == false)
                    {
                        objSubOpcionEN.OPTGEN_P_inID = idSeleccionadoModulo2;
                        objSubOpcionEN.SUBOPT_chDESSOP = txtDescripcion.Text;
                        objSubOpcionEN.SUBOPT_chNOMASP = txtEnlaceOpcion.Text;
                        objSubOpcionEN.SUBOPT_chNOMSOP = txtNombreOpcion.Text;
                        objSubOpcionEN.Codigo = txtCodigoOpcion.Text;
                        if (cbParametrosMod.Visible)
                        {
                            if (cbParametrosMod.Checked)
                            {
                                objSubOpcionEN.EnvParametro = 1;
                                HasParam = true;
                            }
                            else
                                objSubOpcionEN.EnvParametro = 0;
                        }
                        if (rbInterno.Checked)
                            objSubOpcionEN.Tipo = 'I';
                        else
                            objSubOpcionEN.Tipo = 'E';
                    }
                    else
                    {
                        objSubOpcionEN.OPTGEN_P_inID = idSeleccionadoModulo2;
                        objSubOpcionEN.SUBOPT_chDESSOP = txtDescripcion.Text;
                        objSubOpcionEN.SUBOPT_chNOMASP = "";
                        objSubOpcionEN.SUBOPT_chNOMSOP = txtNombreOpcion.Text;
                        objSubOpcionEN.Codigo = txtCodigoOpcion.Text;
                        objSubOpcionEN.Tipo = 'E';
                        objSubOpcionEN.EnvParametro = 0;
                    }
                    int codigo = MediadorCN.GetSubOpcion().Insertar(objSubOpcionEN);
                    if (codigo > 0)
                    {
                        lstGrupoUsuarios = MediadorCN.GetGrupoUsuario().Listar();
                        for (int i = 0; i < lstGrupoUsuarios.Count; i++)
                        {
                            objAccesoGrupoEN = new AccesoGrupoEN();
                            objAccesoGrupoEN.USUGRU_P_inID1 = lstGrupoUsuarios[i].USUGRU_P_inID;
                            objAccesoGrupoEN.PROMUN_inID = idSeleccionadoPrograma3;
                            objAccesoGrupoEN.PERGRU_inACT = 0;
                            objAccesoGrupoEN.OPTGEN_P_inID = idSeleccionadoModulo2;
                            objAccesoGrupoEN.OPTCON_P_inID = 0;
                            objAccesoGrupoEN.SUBOPT_P_inID = codigo;
                            MediadorCN.GetAccesoGrupo().Insertar(objAccesoGrupoEN);
                        }
                        if (HasParam)
                        {
                            ParametroCuentEN objParametroCuentEN;
                            for (int i = 0; i < cbParametros2.Items.Count; i++)
                            {
                                if (cbParametros2.Items[i].Selected)
                                {
                                    objParametroCuentEN = new ParametroCuentEN();
                                    objParametroCuentEN.CUEWEB_P_inID = codigo;
                                    objParametroCuentEN.PARURL_P_inID = Convert.ToInt32(cbParametros2.Items[i].Value);
                                    MediadorCN.GetParametroCuent().Insertar(objParametroCuentEN);
                                }
                            }
                        }
                        if (cbRestriccion2.Checked)
                        {
                            RestriccionModEN objRestriccionModEN = new RestriccionModEN();
                            objRestriccionModEN.RESEXT_chTIPRES = "M";
                            objRestriccionModEN.RESEXT_inACCRES = codigo;
                            MediadorCN.GetRestriccionMod().Insertar(objRestriccionModEN);
                        }
                        lblErrorOpcion.Text = "Se ha registrado la opción correctamente";
                        gvOpciones.DataSource = MediadorCN.GetSubOpcion().Listar(idSeleccionadoModulo2);
                        gvOpciones.DataBind();
                        txtDescripcion.Text = "";
                        txtEnlaceOpcion.Text = "";
                        txtNombreOpcion.Text = "";
                        txtCodigoOpcion.Text = "";
                        cbParametrosMod.Checked = false;
                    }
                    else
                    {
                        lblErrorOpcion.Text = "No se ha podido registrar la opción";
                    }
                }
                else
                    lblErrorOpcion.Text = "Ingrese los datos solicitados";
            }
            else
            {
                lblErrorOpcion.Text = "Seleccione un módulo";
            }
        }

        protected void btnEditarOpcion_Click(object sender, EventArgs e)
        {
            if (txtNombreOpcion.Text != "" && txtDescripcion.Text != "")
            {
                SubOpcionEN objSubOpcionEN = new SubOpcionEN();
                if (flag == false)
                {
                    objSubOpcionEN.SUBOPT_chDESSOP = txtDescripcion.Text;
                    objSubOpcionEN.SUBOPT_chNOMASP = txtEnlaceOpcion.Text;
                    objSubOpcionEN.SUBOPT_chNOMSOP = txtNombreOpcion.Text;
                    objSubOpcionEN.SUBOPT_P_inID = idSeleccionadoOpcion;
                    objSubOpcionEN.OPTGEN_P_inID = idSeleccionadoModulo2;
                    objSubOpcionEN.Codigo = txtCodigoOpcion.Text;
                    if (cbParametrosMod.Checked)
                        objSubOpcionEN.EnvParametro = 1;
                    else
                        objSubOpcionEN.EnvParametro = 0;
                    objSubOpcionEN.SEGU_inFLAELI = 1;
                    if (rbInterno.Checked)
                        objSubOpcionEN.Tipo = 'I';
                    else
                        objSubOpcionEN.Tipo = 'E';
                }
                else
                {
                    objSubOpcionEN.OPTGEN_P_inID = idSeleccionadoModulo2;
                    objSubOpcionEN.SUBOPT_P_inID = idSeleccionadoOpcion;
                    objSubOpcionEN.SUBOPT_chDESSOP = txtDescripcion.Text;
                    objSubOpcionEN.SUBOPT_chNOMASP = "";
                    objSubOpcionEN.SUBOPT_chNOMSOP = txtNombreOpcion.Text;
                    objSubOpcionEN.Codigo = txtCodigoOpcion.Text;
                    objSubOpcionEN.Tipo = 'E';
                    objSubOpcionEN.SEGU_inFLAELI = 1;
                    objSubOpcionEN.EnvParametro = 0;
                }

                int codigo = MediadorCN.GetSubOpcion().Modificar(objSubOpcionEN);
                if (codigo > 0)
                {
                    lblErrorOpcion.Text = "Se ha actualizado la opción correctamente";
                    gvOpciones.DataSource = MediadorCN.GetSubOpcion().Listar(idSeleccionadoModulo2);
                    gvOpciones.DataBind();
                    txtDescripcion.Text = "";
                    txtEnlaceOpcion.Text = "";
                    txtNombreOpcion.Text = "";
                    txtCodigoOpcion.Text = "";
                    btnEditarOpcion.Visible = false;
                    btnRegistraOpcion.Visible = true;
                    cbParametrosMod.Checked = false;
                }
                else
                    lblErrorOpcion.Text = "No se ha podido actualizar la opción";
            }
            else
                lblErrorOpcion.Text = "Ingrese los datos solicitados";
        }

        protected void rbExterno_CheckedChanged(object sender, EventArgs e)
        {
            if (rbExterno.Checked)
            {
                txtEnlaceOpcion.Text = "";
                //   lblHttp.Visible = true;
            }
            if (rbInterno.Checked)
            {
                txtEnlaceOpcion.Text = "http://Servicios.munijesusmaria.gob.pe/appweb/wperspad/frmControl";
                //   lblHttp.Visible = false;
            }
        }

        protected void rbInterno_CheckedChanged(object sender, EventArgs e)
        {
            if (rbExterno.Checked)
            {
                txtEnlaceOpcion.Text = "";
                //   lblHttp.Visible = true;
            }
            if (rbInterno.Checked)
            {
                txtEnlaceOpcion.Text = "http://Servicios.munijesusmaria.gob.pe/appweb/wperspad/frmControl";
                //   lblHttp.Visible = false;
            }
        }

        protected void btnRegistrarControl_Click(object sender, EventArgs e)
        {
            if (idSeleccionadoOpcion2 != 0)
            {
                List<GrupoUsuariosEN> lstGrupoUsuarios = new List<GrupoUsuariosEN>();
                AccesoGrupoEN objAccesoGrupoEN;
                if (txtNombreControl.Text == "" && txtDescripcionControl.Text == "" && txtCodigo.Text == "")
                {
                    lblErrorControl.Text = "Ingrese los datos solicitados";
                }
                else
                {
                    ControlEN objControlEN = new ControlEN();
                    objControlEN.OPTCON_chNOMCON = txtNombreControl.Text;
                    objControlEN.SUBOPT_P_inID = idSeleccionadoOpcion2;
                    objControlEN.OPTCON_chDESCON = txtDescripcionControl.Text;
                    objControlEN.Codigo = txtCodigo.Text;
                    int codigo = MediadorCN.GetControl().Insertar(objControlEN);
                    if (codigo > 0)
                    {
                        lstGrupoUsuarios = MediadorCN.GetGrupoUsuario().Listar();
                        for (int i = 0; i < lstGrupoUsuarios.Count; i++)
                        {
                            objAccesoGrupoEN = new AccesoGrupoEN();
                            objAccesoGrupoEN.USUGRU_P_inID1 = lstGrupoUsuarios[i].USUGRU_P_inID;
                            objAccesoGrupoEN.PROMUN_inID = Convert.ToInt32(tvOpcionControl.SelectedNode.Parent.Parent.Value) / 10;
                            objAccesoGrupoEN.PERGRU_inACT = 0;
                            objAccesoGrupoEN.OPTGEN_P_inID = Convert.ToInt32(tvOpcionControl.SelectedNode.Parent.Value) / 10;
                            objAccesoGrupoEN.OPTCON_P_inID = codigo;
                            objAccesoGrupoEN.SUBOPT_P_inID = idSeleccionadoOpcion2;
                            MediadorCN.GetAccesoGrupo().Insertar(objAccesoGrupoEN);
                        }

                        lblErrorControl.Text = "Se ha registrado el control correctamente";
                        gvControles.DataSource = MediadorCN.GetControl().Listar(idSeleccionadoOpcion2);
                        gvControles.DataBind();
                        txtDescripcionControl.Text = "";
                        txtCodigo.Text = "";
                        txtNombreControl.Text = "";
                    }
                    else
                    {
                        lblErrorControl.Text = "No se ha podido registrar el control";
                    }
                }
            }
            else
                lblErrorControl.Text = "Seleccione una opción";
        }

        protected void btnEditarControl_Click(object sender, EventArgs e)
        {

            if (txtNombreControl.Text == "" && txtDescripcionControl.Text == "" && txtCodigo.Text == "")
            {
                lblErrorControl.Text = "Ingrese los datos solicitados";
            }
            else
            {
                ControlEN objControlEN = new ControlEN();
                objControlEN.OPTCON_chNOMCON = txtNombreControl.Text;
                objControlEN.SUBOPT_P_inID = idSeleccionadoOpcion2;
                objControlEN.OPTCON_chDESCON = txtDescripcionControl.Text;
                objControlEN.Codigo = txtCodigo.Text;
                objControlEN.SEGU_inFLAELI = 1;
                objControlEN.OPTCON_P_inID = idSeleccionadoControl;
                int codigo = MediadorCN.GetControl().Modificar(objControlEN);
                if (codigo > 0)
                {
                    lblErrorControl.Text = "Se ha actualizado la opción correctamente";
                    gvControles.DataSource = MediadorCN.GetControl().Listar(idSeleccionadoOpcion2);
                    gvControles.DataBind();
                    txtDescripcionControl.Text = "";
                    txtCodigo.Text = "";
                    txtNombreControl.Text = "";
                    btnRegistrarControl.Visible = true;
                    btnEditarControl.Visible = false;
                }

            }
        }

        protected void tvOpcionControl_SelectedNodeChanged(object sender, EventArgs e)
        {
            List<ControlEN> lstControlEN = new List<ControlEN>();
            int index = Convert.ToInt32(tvOpcionControl.SelectedNode.Value);
            txtDescripcionControl.Text = "";
            txtNombreControl.Text = "";
            txtCodigo.Text = "";
            if (index % 10 == 2)
            {
                index = index / 10;
                idSeleccionadoOpcion2 = index;
                lstControlEN = MediadorCN.GetControl().Listar(index);
                gvControles.DataSource = lstControlEN;
                gvControles.DataBind();
                lblTextoListaControl.Text = "Lista de controles de la opción " + tvOpcionControl.SelectedNode.Text;
            }
        }

        protected void gvControles_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            int index = Convert.ToInt32(e.CommandArgument);
            GridViewRow row = gvControles.Rows[index];
            idSeleccionadoControl = Convert.ToInt32(Server.HtmlDecode(row.Cells[0].Text).ToString());
            ControlEN objControlEN = new ControlEN();
            if (e.CommandName == "Editar")
            {
                objControlEN = MediadorCN.GetControl().Obtener(idSeleccionadoControl);
                txtCodigo.Text = objControlEN.Codigo;
                txtNombreControl.Text = objControlEN.OPTCON_chNOMCON;
                txtDescripcionControl.Text = objControlEN.OPTCON_chDESCON;
                btnEditarControl.Visible = true;
                btnRegistrarControl.Visible = false;
            }
            if (e.CommandName == "Eliminar")
            {/*
                int codigo = MediadorCN.GetControl().Eliminar(idSeleccionadoControl);
                if (codigo > 0)
                {
                    MediadorCN.GetAccesoGrupo().EliminarPermisosControl(idSeleccionadoControl);
                    gvControles.DataSource = MediadorCN.GetControl().Listar(idSeleccionadoOpcion2);
                    gvControles.DataBind();
                }*/
                hfOpcion.Value = "4";
                ModalPopupExtender1.Show();
            }
        }

        protected void cbParametros_CheckedChanged(object sender, EventArgs e)
        {
            /*
            if (cbParametros.Checked)
            {
                cblParametros.Visible = true;
                lblListaParametros.Visible = true;
                cblParametros.DataSource = MediadorCN.GetParametro().Listar();
                cblParametros.DataTextField = "NombreParam";
                cblParametros.DataValueField = "ID";
                cblParametros.DataBind();
            }
            else
            {
                cblParametros.Visible = false;
                lblListaParametros.Visible = false;
            }
            */
        }

        protected void cbParametrosMod_CheckedChanged(object sender, EventArgs e)
        {/*
            if (cbParametrosMod.Checked)
            {
                cbParametros2.Visible = true;
                lblParametros2.Visible = true;
                cbParametros2.DataSource = MediadorCN.GetParametro().Listar();
                cbParametros2.DataTextField = "NombreParam";
                cbParametros2.DataValueField = "ID";
                cbParametros2.DataBind();
            }
            else
            {
                cbParametros2.Visible = false;
                lblParametros2.Visible = false;
            }*/
        }

        protected void btnSi_Click(object sender, EventArgs e)
        {
            Eliminacion(Convert.ToInt32(hfOpcion.Value));
        }
    }
}